#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
1. timestamp是一个浮点数，它没有时区的概念，而datetime是有时区的
2. 如果要存储datetime，最佳方法是将其转换为timestamp再存储，因为timestamp的值与时区完全无关
3. datetime表示的时间需要时区信息才能确定一个特定的时间，否则只能视为本地时间
"""

# 从datetime 模块下导入datetime类
from datetime import datetime,timedelta, timezone

# 1、打印当前时间
now = datetime.now()
print(now)

# 2、用指定日期创建datetime
dt = datetime(2015, 4, 19, 12, 20)
print(dt)

# 3、datetime转换为timestamp
timestamp = dt.timestamp()
print(timestamp)

# 4、timestamp转换为datetime
dt2 =  datetime.fromtimestamp(timestamp)
print(dt2)

# 5、本地时间和UTC时间
# 本地时间
print("本地时间 is %s" % datetime.fromtimestamp(timestamp))
# utc 时间
print("utc 时间 is %s" % datetime.utcfromtimestamp(timestamp))

# 6、str 转换为timestamp,转换后的datetime是没有时区信息的
cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
print("str 转换为timestamp is %s" % cday)

# 7、datetime转换为str
strtime = now.strftime('%a, %b %d %H:%M')
print("datetime转换为str is %s" % strtime)

# 8、 datetime 加减
now1 = now + timedelta(hours=10)
print(now1)
now2 = now + timedelta(days=-1,hours=2)
print(now2)

# 9、本地时间转换为UTC时间
tz_utc_8 = timezone(timedelta(hours=8)) # 创建时区UTC+8:00
now = datetime.now()
print(now)
dt_utc = now.replace(tzinfo=tz_utc_8) # 强制设置为UTC+8:00
print(dt_utc)

# 10、时区转换
# 拿到UTC时间，并强制设置时区为UTC+0:00:
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_dt)
# astimezone()将转换时区为北京时间:
bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print(bj_dt)

# astimezone()将转换时区为东京时间:
tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
print(tokyo_dt)